import * as Notifications from 'expo-notifications';
import { Platform } from 'react-native';

/**
 * 通知服务
 * 注意：通知功能在 Web 平台上不可用
 */
class NotificationService {
  /**
   * 检查是否支持通知
   */
  isAvailable() {
    return Platform.OS !== 'web';
  }

  /**
   * 初始化通知权限
   */
  async initialize() {
    if (!this.isAvailable()) {
      console.log('通知功能在 Web 平台上不可用');
      return false;
    }

    try {
      // 设置通知处理程序
      Notifications.setNotificationHandler({
        handleNotification: async () => ({
          shouldShowAlert: true,
          shouldPlaySound: true,
          shouldSetBadge: true,
        }),
      });

      // 请求权限
      const { status } = await Notifications.requestPermissionsAsync();
      return status === 'granted';
    } catch (error) {
      console.warn('通知初始化失败:', error);
      return false;
    }
  }

  /**
   * 安排每日提醒
   */
  async scheduleDailyReminder(time, message = '记得制定今天的计划哦！') {
    if (!this.isAvailable()) {
      console.log('通知功能在 Web 平台上不可用');
      return;
    }

    try {
      const [hours, minutes] = time.split(':').map(Number);
      
      await Notifications.cancelAllScheduledNotificationsAsync();
      
      await Notifications.scheduleNotificationAsync({
        content: {
          title: 'PlanFlow 提醒',
          body: message,
          sound: true,
        },
        trigger: {
          hour: hours,
          minute: minutes,
          repeats: true,
        },
      });
    } catch (error) {
      console.warn('安排通知失败:', error);
    }
  }

  /**
   * 取消所有通知
   */
  async cancelAllNotifications() {
    if (!this.isAvailable()) {
      return;
    }

    try {
      await Notifications.cancelAllScheduledNotificationsAsync();
    } catch (error) {
      console.warn('取消通知失败:', error);
    }
  }

  /**
   * 发送即时通知
   */
  async sendNotification(title, body) {
    if (!this.isAvailable()) {
      console.log('通知功能在 Web 平台上不可用');
      return;
    }

    try {
      await Notifications.scheduleNotificationAsync({
        content: {
          title,
          body,
          sound: true,
        },
        trigger: null, // 立即发送
      });
    } catch (error) {
      console.warn('发送通知失败:', error);
    }
  }

  /**
   * 获取所有已安排的通知
   */
  async getAllScheduledNotifications() {
    if (!this.isAvailable()) {
      return [];
    }

    try {
      return await Notifications.getAllScheduledNotificationsAsync();
    } catch (error) {
      console.warn('获取通知失败:', error);
      return [];
    }
  }
}

export default new NotificationService();

